package com.ideaaedi.mybatis.data.security.support;

/**
 * 克隆支持
 * <br/>
 * <p>
 *  在某些特定的场景(如存在各种缓存的情况)下，我们希望
 *  <ul>
 *      <li>
 *          入库加密时，加密后的密文不要回写到原来的对象中 —— 因为在某些业务场景下，入库后，后面的程序逻辑还需要取对应的明文值而不是密文值。
 *      </li>
 *      <li>
 *          出库解密时，解密后的明文不要回写到原来的对象中 —— 因为在某些业务场景下，出库后，后面的一些程序逻辑需要修改查询出来的对象的属性值，
 *          你这里修改后；当别人使用相同的sql查询时，因为某些缓存机制的存在，就可能导致别人查出来的对象就是你现在在操作着的对象，随意这个对象
 *          的值比起数据库数据来说，是"失真"了的
 *      </li>
 *  </ul>
 *
 *
 * @author JustryDeng
 * @since 2021/7/18 19:58:14
 */
public interface PojoCloneable<T extends PojoCloneable<T>> {
    
    /**
     * 克隆当前对象
     *
     * @return  （以当前对象）克隆出来的对象
     */
    T clonePojo();
}
